package com.haojin.java;

/**
 * @author .29.
 * @create 2022-03-30 14:03
 * <p>

 * 测试Thread类中的常用方法
 * 1.start():启动当前线程；调用当前线程的run()
 * 2.run():通常需要重写Thread类中的次方啊，将创建的线程要执行的操作声明在此方法中
 * 3.currentThread():(静态方法）返回当前代码执行的线程
 * 4.getName():获取当前线程的名字
 * 5.setName();设置当前线程的名字
 * 6.yield():释放当前cpu的执行权
 * 7.join():在线程a中调用线程b的join()，此时线程a进入阻塞状态，知道线程b完全执行完以后，线程a才结束阻塞状态
 * 8.stop():（已过时），当执行此方法时，强制结束当前方法
 * 9.sleep(long millitime):让当前线程“睡眠”知道你过的millitime毫秒。在指定多个millitime毫秒时间内，当前线程是阻塞状态
 * 10.isAlive():判断当前线程是否存活
 *
 *
 * 线程的优先级：
 * 1.
 * MAX_PRIORITY: 10
 * MIN_PRIORITY: 1
 * NORM_PRIORITY: 5 -->默认的优先级
 * 2.如何获取和设置当前线程的优先级：
 * getPriority():获取线程的优先级
 * setPriority():设置线程的优先级
 *
 *说明：高优先级的线程要抢占低优先级线程cpu的执行权，但只是从概率上讲，不意味着高优先级就一定先执行完才到低优先级
 *
 *
 */

class Thread1 extends Thread {
    public Thread1(String name) {
        super(name);
    }

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {

//                try {
//                    sleep(1000);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }

                System.out.println(Thread.currentThread().getName() +Thread.currentThread().getPriority()+" "+ i);
            }
//            if(i%20 ==0){
//                this.yield();
//            }
        }
    }
}

public class ThreadMethodTest {
    public static void main(String[] args) {
        Thread1 t1 = new Thread1("Thread 1:");
//        t1.setName("线程一");
        //设置分线程的有优先级
        t1.setPriority(Thread.MAX_PRIORITY);
        t1.start();

        //给主线程重命名
        Thread.currentThread().setName("主线程 : ");
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() +Thread.currentThread().getPriority()+" "+ i);
            }
//            if (i == 20) {
//                try {
//                    t1.join();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
        }
        System.out.println(t1.isAlive());
    }
}
